package lintulaskenta.entity;



import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;

/*
 * Pisteitä joilla havaintoja tehdään.
 * Havainnointipiste sisältää tiedon vain pisteitten koordinaateista
 * (tätä dataa ei ole tarjolla vanhoille laskennoille).
 * On määritelty että pisteen täytyisi voida olla monella eri reitillä, muttei
 * koskaan samana vuonna.
 */

@Entity
public class Havaintopiste implements Serializable{  


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long hpId;
    @Column
    private int pohjoiskoordinaatti;
    @Column
    private int itakoordinaatti;
    @ManyToMany(cascade = CascadeType.MERGE, mappedBy="havaintopisteet")
    private List<Reitti> reitit = new ArrayList<Reitti>();    
    @OneToMany(cascade = CascadeType.MERGE, mappedBy="havaintopiste")
    private List<Pistevuosi> pistevuodet = new ArrayList<Pistevuosi>();

        
    public Havaintopiste() {
    }

    public Havaintopiste(int pohjoiskoordinaatti, int itakoordinaatti) {
        this.pohjoiskoordinaatti = pohjoiskoordinaatti;
        this.itakoordinaatti = itakoordinaatti;
    } 
    
    public List<Pistevuosi> getPistevuodet() {
        return pistevuodet;
    }

    public void addPistevuosi(Pistevuosi p) {
        if (p != null) {
            p.setHavaintopiste(this);
            if (!pistevuodet.contains(p)) {      
                pistevuodet.add(p);
            }
        }
    }

    public long getHpId() {
        return hpId;
    }

    public int getItakoordinaatti() {
        return itakoordinaatti;
    }

    public void setItakoordinaatti(int itakoordinaatti) {
        this.itakoordinaatti = itakoordinaatti;
    }

    public int getPohjoiskoordinaatti() {
        return pohjoiskoordinaatti;
    }

    public void setPohjoiskoordinaatti(int pohjoiskoordinaatti) {
        this.pohjoiskoordinaatti = pohjoiskoordinaatti;
    }

    public List<Reitti> getReitit() {
        return reitit;
    }

    public void addReitti(Reitti r) {
        if (r != null) {
            if (!r.getHavaintopisteet().contains(this)) {
                r.getHavaintopisteet().add(this);
            }
            if (!reitit.contains(r)) {
                reitit.add(r);
            }
        }
    }
       
}
